package com.gxaedu.rbac.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;

/**
 * @author:Teacher黄
 * @date:Created at 2020/04/16
 * JavaConfig的方式 本质上和Spring.xml中的<Bean/>是相同的
 */
@Configuration
public class RedisConfig {


    /**
     * 向Spring容器中注入一个jsonRedisTemplate对象
     * @param factory
     * @return
     */
    @Bean("jsonRedisTemplate")
    public RedisTemplate<String,Object> jsonRedisTemplate(RedisConnectionFactory factory){
        // 实例化一个RedisTemplate
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        // 设置连接工厂
        redisTemplate.setConnectionFactory(factory);
        // 设置相关参数
        redisTemplate.afterPropertiesSet();

        // 设置序列化的类型
        // 设置key的序列化类型
        redisTemplate.setKeySerializer(RedisSerializer.string());
        // 设置value的序列化类型
        redisTemplate.setValueSerializer(RedisSerializer.json());
        // 设置hash的key的序列化类型
        redisTemplate.setHashKeySerializer(RedisSerializer.string());
        // 设置hashValue的序列化类型
        redisTemplate.setHashValueSerializer(RedisSerializer.json());

        return redisTemplate;
    }


    /**
     * 向Spring容器中注入一个jsonRedisTemplate对象
     * @param factory
     * @return
     */
    @Bean("objectRedisTemplate")
    public RedisTemplate<String,Object> objectRedisTemplate(RedisConnectionFactory factory){
        // 实例化一个RedisTemplate
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        // 设置连接工厂
        redisTemplate.setConnectionFactory(factory);
        // 设置相关参数
        redisTemplate.afterPropertiesSet();

        // 设置序列化的类型
        // 设置key的序列化类型
        redisTemplate.setKeySerializer(RedisSerializer.string());
        // 设置value的序列化类型
        redisTemplate.setValueSerializer(RedisSerializer.java());
        // 设置hash的key的序列化类型
        redisTemplate.setHashKeySerializer(RedisSerializer.string());
        // 设置hashValue的序列化类型
        redisTemplate.setHashValueSerializer(RedisSerializer.java());

        return redisTemplate;
    }

}
